import kotlin.reflect.KProperty


// 委托的类
class Delegate {
    operator fun getValue(thisRef: Any?, property: KProperty<*>): String {
        return "${thisRef}, 这里委托了 ${property.name} 属性"
    }

    operator fun setValue(thisRef: Any?, property: KProperty<*>, value: String) {
        println("${thisRef}, ${property.name} 属性赋值为: $value")
    }
}

// 定义包含属性委托的类
class Example {
    var p: String by Delegate()
}

fun main(args: Array<String>) {
    val e = Example()
    println(e.p)      // 访问该属性，调用 getValue() 函数

    e.p = "一缕清风"   // 调用 setValue() 函数
    println(e.p)
}


/*
输出结果为：
Example@cc34f4d, 这里委托了 p 属性
Example@cc34f4d, p 属性赋值为: 一缕清风
Example@cc34f4d, 这里委托了 p 属性
*/